为什么编程更关注内存而很少关注CPU?
The following article is from 编程技术宇宙 Author 轩辕之风
第一时间收到文章更新
作者 | 轩辕之风
周末的时候,我在知乎上看到这么一个问题,觉得很有意思。
我们知道,我们编写的程序,不管是什么编程语言,最后执行的时候,基本上都是CPU在完成。之所以说基本上,是因为还有GPU、FPGA等特殊情况。
但不知道大家发现没有,我们编程的时候,经常在关注内存问题,比如堆和栈的区别、内存分配与释放、指针问题、内存泄露问题等等,但为什么作为执行程序的核心角色——CPU,我们却很少去关注它呢?
对于这个问题,你是怎么看的,思考5秒钟想想?
下面是我的一些看法。
这其实是编程语言越来越“高级”的结果。
事实上,在几十年前,那时候没有现在这么多高级语言,很多编程大佬们都是徒手写汇编,就必须得关注CPU。
以我们熟知的Intel x86架构为例,思考这几个问题:
长跳和短跳有什么区别?
中断门、任务门、调用门分别是什么,有什么区别?
x86的CPU有哪些常用寄存器,分别是做什么用的?
虚拟地址、逻辑地址、线性地址、物理地址分别是什么,有什么区别?
我的公众号读者很多是搞C/C++和底层软件开发的,估计都很少有人能完整回答出这些问题,更别说其他搞Java、Python、JavaScript的一票程序员了。
但是用汇编语言编程,太伤脑子了,开发效率低不说,更重要的是,辛辛苦苦吭哧吭哧写完,结果换个CPU平台还没法通用。
后来,计算机工程师们开始思考:编程为什么还要考虑CPU?得把这些东西屏蔽掉!所以,高级语言应运而生了,从那时起,程序员们编程基本不用考虑CPU了,这些底层的细节,编译器和操作系统都给封装好了,提供一致的调用接口,我们只需要调用操作系统提供的编程接口就好了。
再后来,程序员们觉得面向操作系统编程也很麻烦,和上面CPU同样的问题,不同操作系统的编程API完全不一样,辛辛苦苦吭哧吭哧写完,结果从Windows换到Linux,又不能用了!
计算机工程师们又开始思考:为什么还要考虑操作系统、内存这些东西?于是直接面向虚拟机、解释器的语言又出来了。
如果你是Java、Python、JavaScript的程序员,想想你在编程的时候会关心操作系统,会关心内存管理吗?
估计以后会有人提问:为什么编程很少关注操作系统了?为什么编程很少关注内存了?
时代在发展,功能封装了一层又一层,现在的程序员,越来越少去关注底层的东西了。
但这也造成的一个后果就是,开发的门槛降的越来越低,不需要学《计算机组成原理》、《操作系统》、《数据结构与算法》这些计算机基础课程,只需要《21天从入门到精通》就可以进入这个行业。
我之前看到过一个报道,最近几年,每年毕业的大学生大概在1000万左右。其中计算机相关专业(包含计算机科学与技术、软件工程、网络工程、通信工程、电子信息工程、自动化等)加起来的人数占比在10%左右,这样算下来每年都有100万左右的新人涌入这个赛道,这还不包括很多其他专业转码的人,加起来只会更多。
这样一想,计算机真的是卷的厉害。
随着越来越多新人的加入,计算机软件开发行业竞争也越来越激烈,只靠CRUD技能很大程度上会限制程序员们在技术领域的发展。而学习了解一些计算机底层技术知识,修炼好程序员的内功,可以帮助我们知其然还能知其所以然,在一众开发中脱颖而出。
所以推荐咱们程序员除了日常工作项目开发工作,多了解一些计算机底层的知识。像是Linux操作系统、计算机网络工作原理、数据库底层原理等等。
送书福利
《电脑入门基础教程(Windows 11+Office 2021)》这是一本一看就懂、一学就会的电脑入门图书,既适合无基础又想快速掌握电脑入门操作的读者学习,也可作为广大职业院校、电脑培训班的教学用书。
《运营之巅:非互联网行业的新媒体运营》本书为非互联网行业的新媒体运营者量身定制,深度梳理实际运营工作中的重难点,提供快速成长的可复制经验。本书所有案例均来自近两年作者亲自操盘或者参与的项目,玩法新潮,干货满满,实战性强,行文真实幽默且有趣有料,堪称非互联网行业新媒体从业者、新媒体爱好者的案头书。
《私域社群运营 从入门到精通》本书按照基础知识、实战干货、案例拆解的方式,对私域社群运营整体内容进行讲解,一步一步地带领读者理解什么是私域社群运营,私域社群运营的方法有哪些,怎样才能做好私域社群实战。
你对本文有什么看法?欢迎留下你的观点,活动截止时会选出多名小锦鲤,中奖者可以获得上面的纸质书籍任选1本,免费包邮到家。
活动截止时间:2023年06月22日 16:00 整兑奖截止时间:2023年06月23日 16:00 整